package com.colabo.j2ee.web.core.persistence;

/**
 * 查询分页管理抽象管理类.<br>
 * 描述: 子类有HqlWrapper(Hibernate查询方式)及SqlWrapper(iBatis查询方式)。
 * 在进行分页查询时，可使用此类为参数，并返回相应查询结果及总计记录数(如果需要)。
 */
public abstract class AbstractWrapper {
	/**
	 * 查询结果的起始位置
	 */
	private int offset;

	/**
	 * 返回页大小
	 */
	private int pageSize;

	/**
	 * 当前页码
	 */
	private int pageNo;

	/**
	 * 总页数
	 */
	private int pageCount;

	/**
	 * 总记录数
	 */
	private int recordCount;

	/**
	 * 是否要统计总记录数
	 */
	private boolean countTotalSize;

	/**
	 * 构造函数
	 */
	public AbstractWrapper() {
		this.pageSize = 0;
		this.pageNo = 0;
		this.pageCount = 0;
		this.recordCount = 0;
		this.offset = -1;
		// this.queryList = null;
		this.countTotalSize = true;
	}

	/**
	 * 获取页大小
	 */
	public int getPageSize() {
		return pageSize < 0 ? 0 : pageSize;
	}

	/**
	 * 设置页大小
	 */
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
		this.offset = this.pageSize * (this.pageNo - 1);
	}

	/**
	 * 获取当前页号
	 */
	public int getPageNo() {
		return pageNo < 0 ? 0 : pageNo;
	}

	/**
	 * 设置当前页号
	 * 
	 * @param pageNo
	 *            页号
	 */
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
		this.offset = this.pageSize * (this.pageNo - 1);
	}

	/**
	 * 查询结果的起始位置
	 */
	public int getOffset() {
		return offset < 0 ? 0 : offset;
	}

	/**
	 * 设置起始位置
	 * @param offset
	 */
	public void setOffset(int offset) {
		this.offset = offset;
	}

	/**
	 * 总页数
	 */
	public int getPageCount() {
		if (pageSize <= 0) {
			this.pageCount = 0;
		} else {
			this.pageCount = (recordCount - 1) / pageSize + 1;
		}
		return pageCount;
	}

	/**
	 * 总记录数
	 */
	public int getRecordCount() {
		return recordCount < 0 ? 0 : recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	/**
	 * 是否要统计总记录数
	 */
	public boolean isCountTotalSize() {
		return countTotalSize;
	}

	/**
	 * 设置是否要统计总记录数
	 * @param countTotalSize
	 */
	public void setCountTotalSize(boolean countTotalSize) {
		this.countTotalSize = countTotalSize;
	}
}
